const memorize = (function () {
  const cache = {};
  return function (fn) {
    return async function (params) {
      const key = JSON.stringify(params);
      if (!cache[key]) {
        const result = await fn(params);
        cache[key] = result;
      }
      return cache[key];
    };
  };
})();

function add({ a, b }) {
  // 一个后端接口，发起http请求
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('a+b=', a + b);
      resolve(a + b);
    }, 1000);
  });
  // return ajax.get(a,b)
}

// 测试输出
async function test() {
  console.log(await memorize(add)({ a: 1, b: 2 })); // 发起一次http请求(输出一次 a+b= 3)
  console.log(await memorize(add)({ a: 3, b: 4 })); // 发起一次http请求 (输出一次 a+b= 7)
  console.log(await memorize(add)({ a: 1, b: 2 })); // 参数一样，读取缓存结果，不发起http请求
}

test();

function func(arr) {
  const cache = [];
  const cache2 = {};
  for(let i = 0; i < arr.length; i++) {
    cache2[arr[i]] = cache2[arr[i]] || 0 + 1;
    for(let j = i + 1; j < arr.length; j++) {
      cache2[arr[j]] = cache2[arr[j]] || 0 + 1;
      if (cache2[0] === cache2[1]) {
        cache.push();
      }
    }

    cache2 = {};
  }
}
